<script lang='ts' setup>
import { reactive, watch } from "vue"
import router from "/@/router"
import cloud404 from "/@/assets/img/error-page/404-cloud.png"
import main404 from "/@/assets/img/error-page/404.png"
import { useRouter } from "vue-router"
const errPageState = reactive({
    message: '404 Not Found',
    time: 10,
    timeBack: setInterval(() => {
        --errPageState.time
    }, 1000)
})

const route = useRouter()
watch(() => errPageState.time, () => {
    if (errPageState.time <= 0) {
        clearInterval(errPageState.timeBack)
        route.currentRoute.value.fullPath === "/home" ? router.go(-1) : router.push({ path: '/' })
    }
})

</script>
<template>
    <div class="err404-container">
        <div class="err404-main">
            <div class="err404-pic">
                <img class="err404-pic-parent" :src="main404" alt="404" />
                <img class="err404-pic-child left" :src="cloud404" alt="404" />
                <img class="err404-pic-child mid" :src="cloud404" alt="404" />
                <img class="err404-pic-child right" :src="cloud404" alt="404" />
            </div>
            <div class="text-404">
                <div class="text-404-title">未找到页面!</div>
                <br />
                <div class="text-404__info">抱歉您访问的页面不存在，{{ errPageState.time }}秒后将返回首页...</div>
                <div class="text-404-headline">{{ errPageState.message }}</div>
                <br />
                <div class="text-404__info">请检查网络是否通畅，或者单击下面的按钮返回主页</div>
                <br />
                <a class="text-404-return-home" @click="$router.push({ path: '/' })">返回首页</a>
            </div>
        </div>
    </div>
</template>

<style lang="scss" scoped>
.err404-container {
    transform: translate(-50%, -50%);
    position: absolute;
    top: 40%;
    left: 50%;
}

.err404-main {
    position: relative;
    width: 1200px;
    padding: 0 50px;
    overflow: hidden;
    .err404-pic {
        position: relative;
        float: left;
        width: 600px;
        overflow: hidden;
        &-parent {
            width: 100%;
        }
        &-child {
            position: absolute;
            &.left {
                width: 80px;
                top: 17px;
                left: 220px;
                opacity: 0;
                animation-name: cloudLeft;
                animation-duration: 2s;
                animation-timing-function: linear;
                animation-fill-mode: forwards;
                animation-delay: 1s;
            }
            &.mid {
                width: 46px;
                top: 10px;
                left: 420px;
                opacity: 0;
                animation-name: cloudMid;
                animation-duration: 2s;
                animation-timing-function: linear;
                animation-fill-mode: forwards;
                animation-delay: 1.2s;
            }
            &.right {
                width: 62px;
                top: 100px;
                left: 500px;
                opacity: 0;
                animation-name: cloudRight;
                animation-duration: 2s;
                animation-timing-function: linear;
                animation-fill-mode: forwards;
                animation-delay: 1s;
            }
            @keyframes cloudLeft {
                0% {
                    top: 17px;
                    left: 220px;
                    opacity: 0;
                }
                20% {
                    top: 33px;
                    left: 188px;
                    opacity: 1;
                }
                80% {
                    top: 81px;
                    left: 92px;
                    opacity: 1;
                }
                100% {
                    top: 97px;
                    left: 60px;
                    opacity: 0;
                }
            }
            @keyframes cloudMid {
                0% {
                    top: 10px;
                    left: 420px;
                    opacity: 0;
                }

                20% {
                    top: 40px;
                    left: 360px;
                    opacity: 1;
                }

                70% {
                    top: 130px;
                    left: 180px;
                    opacity: 1;
                }

                100% {
                    top: 160px;
                    left: 120px;
                    opacity: 0;
                }
            }

            @keyframes cloudRight {
                0% {
                    top: 100px;
                    left: 500px;
                    opacity: 0;
                }

                20% {
                    top: 120px;
                    left: 460px;
                    opacity: 1;
                }

                80% {
                    top: 180px;
                    left: 340px;
                    opacity: 1;
                }

                100% {
                    top: 200px;
                    left: 300px;
                    opacity: 0;
                }
            }
        }
    }

    .text-404 {
        position: relative;
        float: left;
        width: 300px;
        padding: 30px 0;
        overflow: hidden;

        &-title {
            font-size: 32px;
            font-weight: bold;
            line-height: 40px;
            color: #e6ac70;
            opacity: 0;
            margin-bottom: 20px;
            animation-name: slideUp;
            animation-duration: 0.5s;
            animation-fill-mode: forwards;
        }

        &-headline {
            font-size: 20px;
            line-height: 24px;
            color: #222;
            font-weight: bold;
            opacity: 0;
            margin-bottom: 10px;
            animation-name: slideUp;
            animation-duration: 0.5s;
            animation-delay: 0.1s;
            animation-fill-mode: forwards;
        }

        &__info {
            font-size: 13px;
            line-height: 21px;
            color: grey;
            opacity: 0;
            margin-bottom: 30px;
            animation-name: slideUp;
            animation-duration: 0.5s;
            animation-delay: 0.2s;
            animation-fill-mode: forwards;
        }

        &-return-home {
            display: block;
            float: left;
            width: 110px;
            height: 36px;
            background: #1482f0;
            border-radius: 100px;
            text-align: center;
            color: #ffffff;
            opacity: 0;
            font-size: 14px;
            line-height: 36px;
            cursor: pointer;
            animation-name: slideUp;
            animation-duration: 0.5s;
            animation-delay: 0.3s;
            animation-fill-mode: forwards;
        }

        @keyframes slideUp {
            0% {
                transform: translateY(60px);
                opacity: 0;
            }

            100% {
                transform: translateY(0);
                opacity: 1;
            }
        }
    }
}
</style>